# 数据库工具类
import peewee
import peewee_async
import datetime
import json
import pymysql
import redis
# 导入序列器工具
from playhouse.shortcuts import model_to_dict
# 导入数据库名称账户密码
from settings import DATABASE,USER,PASSWORD,LOCALHOST,REDIS_HOST

# 创建数据库连接对象
database = peewee_async.PooledMySQLDatabase(DATABASE,host=LOCALHOST,port=3306,user=USER,password=PASSWORD)

class TestTable(peewee.Model):
    
    test = peewee.CharField(null=False,default=None)


    class Meta:
        database = database



# 创建表
# TestTable.create_table(True)


# 单序列器
def myserializer(model,many=False):
    if many == False:
        # 第一次转换
        mymodel = model_to_dict(model)
        return mymodel
    else:
        # 多个转换
        # model.dicts()
        return list(model.dicts())


# 封装mysql使用
class MysqlDb:

    def __init__(self):

        #建立连接
        self.conn = pymysql.connect(host=LOCALHOST,user=USER,password=PASSWORD,db=DATABASE,charset="utf8",cursorclass=pymysql.cursors.DictCursor)
        #创建游标
        self.cursor = self.conn.cursor()

    #读取
    def read(self,sql):
        #执行sql语句
        self.cursor.execute(sql)
        #获取结果集
        res = self.cursor.fetchone()
        return res

    #读取多个
    def read_list(self,sql):
        #执行sql语句
        self.cursor.execute(sql)
        #获取结果集
        res = self.cursor.fetchall()
        return res

    #写入 / 修改
    def update(self,sql):
        #执行sql语句
        self.cursor.execute(sql)
        #提交
        self.conn.commit()

    #析构方法 关闭数据库连接
    def __del__(self):

        self.cursor.close()
        self.conn.close()


# 测试
# db = MysqlDb()
# 添加数据
# db.update(" insert into `tag` (tag) values ('test') " )
# 读取数据
# print(db.read(" select * from `tag` "))
# 修改数据
# db.update(" update `tag` set tag='你好' where id = 1")
# 删除数据
# db.update(" delete from `tag` where id = 6 ")


# 链接redis
def redis_connect():
    r = redis.Redis(host=REDIS_HOST,decode_responses=True)
    return r

